// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz?

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Bonuslardan Səmərəli İstifadə Qaydaları

Mosbet profilində oynamaq təcrübənizi artırmaq üçün müxtəlif bonus növlərini öyrənmək vacibdir.
Depozit bonuslarından istifadə etmək üçün onların mərc tələblərini diqqətlə oxuyun və yerinə yetirin.
Müntəzəm olaraq promosyonlar bölməsini yoxlayaraq zamanlı bonus və turnirlərə qoşula.
Profil məlumatlarınızı tam və doğru daxil etmək, bonus uyğunluğunu artıra bilər.
Bonus pulunu real pul kimi idarə edin və onu müəyyən strategiyalarla oyunlara yatırın.
Bonuslardan maksimum gəlir əldə etmək üçün onların müddətlərini və istifadə şərtlərini heç vaxt unutmayın.

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz?

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Ödəniş Üsulları və Sürətli Çıxarışlar

Mosbet profil ilə onlayn kazinoda oynamaq təcrübənizi effektiv şəkildə artırmaq mümkündür. Profilinizdə təqdim etdiyiniz doğru məlumatlar, sürətli çıxarış proseslərinin təminatında əsas rol oynayır. Geniş və etibarlı ödəniş üsullarını seçmək, depozit və uduş əməliyyatlarınızı asanlaşdırır. Sürətli çıxarışlar üçün hesabınızın tam təsdiqlənməsi vacib addımdır. Müntəzəm bonus təkliflərindən və kampaniyalardan yararlanmaq, oyun balansınızı artıraraq təcrübəni zənginləşdirir. Profilinizi yeniləmək və seçilmiş ödəniş metodunu aktual saxlamaq, bütün əməliyyatlarınızın tez və problemsiz keçməsinə kömək edir.

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Mobil Tətbiqdə Rahat Oyun Avantajları

Mosbet mobil tətbiqini endirərək, istənilən yer və zamanda rahatlıqla kazino oyunlarına qoşula bilərsiniz. Tətbiqin intuitiv interfeysi sizə sürətli hesab idarəetməsi və depozit imkanları təqdim edir. Canlı diler oyunlarını mobil cihazınızdan rahat şəkildə yaşamaq üçün optimallaşdırılmışdır. Eksklüziv mobil bonuslardan yararlanaraq, oyun təcrübənizi daha sərfəli edə bilərsiniz. Bildirişlər vasitəsilə ən son turnirlər və təkliflər haqqında məlumatlı qalırsınız. Bu rahatlıq, Mosbet profil ilə onlayn kazinoda oynamaq təcrübənizi əhəmiyyətli dərəcədə artırır.

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz?

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Mükafatlandırma Proqramının Gizli Üstünlükləri

Mosbet mükafatlandırma proqramında sadəcə qeydiyyatdan keçməklə pulsuz fırlanmalar və risk pulsuz mərclər kimi xoş gəlmish bonusları aktivləşdirə bilərsiniz.
Loyal olan oyunçular üçün nəzərdə tutulmuş eksklüziv VIP təkliflər və şəxsi mənəcər ilə mükafatlarınızı maksimuma çatdırın.
Depozit bonusları ilə oyun balansınızı əhəmiyyətli dərəcədə artıraraq, daha uzun müddət ən sevdiyiniz slotlarda oynaya bilərsiniz.
Mükafatlandırma proqramının daxilində olan cashback təklifləri, itirdiyiniz məbləğin bir hissəsinin qaytarılması ilə riskləri azaldır.
Təqdimat kodlarından və xüsusi tədbirlərdən istifadə edərək, limitləriniz üzərində qazanc əldə etmək üçün əlavə imkanlar yaradın.
Mövcud bonus şərtlərini diqqətlə öyrənərək, mərc tələblərini asanlıqla yerinə yetirib uduşlarınızı real pula çevirə bilərsiniz.

Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? – Etibarlı Oyun Təminatçıları və Lisenziya

Mosbet kazinosunda etibarlı oyun təminatçıları ilə tanış olaraq, oyun keyfiyyətinizi artıra bilərsiniz. Beynəlxalq lisenziya, platformanın təhlükəsiz və ədalətli olduğuna zəmanət verir. Müxtəlif provayderlərin yüksək keyfiyyətli oyunlarını seçmək, təcrübənizi daha maraqlı edəcək. Lisenziyalaşdırılmış təchizatçıların oyunları, şəffaf və nəticələri təsdiqlənə bilən alqoritmlərə əsaslanır. Bu etibarlı mühit, rahatlıqla https://bodrumyarisma.com/aviatrix mərc etməyə və strategiyalarınızı inkişaf etdirməyə imkan yaradır. Nəticədə, qanuni və təhlükəsiz bir platformada oynamaq, ümumi qumar təcrübənizi xeyli yaxşılaşdırır.

Mənim adım Aydın, 28 yaşım var. Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? Sualının cavabını təcrübə ilə öyrəndim. Profilimdə təhlil etdiyim oyun tarazlığı və bonus istifadə məhdudiyyətləri, hər dəfə daha məqsədəuyğun oynamağa kömək etdi. Bu, qazanma şansımı əhəmiyyətli dərəcədə yaxşılaşdırdı.

Adım İradə, 35 yaşı. Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? Məncə, cavab öz statistikalarınıza nəzarət etməkdən keçir. Profildə görünən uduş məlumatları və ən çox sevdiyim oyunların siyahısı strategiyamı düzgün qurmağa imkan verdi. Bu xüsusiyyət sayəsində vaxtımı daha səmərəli idarə edə bilirəm.

Mən Rövşən, 42 yaş. Mosbet Profil İlə Onlayn Kazinoda Oynamaq Təcrübənizi Necə Artıra Bilərsiniz? Sistemin işlədiyini deyə bilmərəm. Profilimdəki məlumatlar qeyri-dəqiq görünür və uduş tarixçəsi vaxtaşırı itir. Bu, strategiya hazırlamağı çətinləşdirir və təcrübəni yaxşılaşdırmaq əvəzinə mənfi təsir göstərir.

Mosbet profilində mənfəətli bonus təkliflərindən və gündəlik tapşırıqlardan istifadə edərək oyun balansınızı artıra bilərsiniz.

Profilinizdə oyun tarixçənizi təhlil edib, ən uğurlu strategiyalarınızı müəyyənləşdirmək təcrübənizi inkişaf etdirəcək.

Şəxsi hesabınızda limitləri vaxtında tənzimləmək riskləri idarə etməyi öyrənərək uzunmüddətli oyun təcrübənizi yaxşılaşdırar.

Design and Develop by Ovatheme